# import socket
# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)      #IPV4   TCP
# s.bind( ('localhost', 9000) )        #绑定IP地址 绑定端口1000-65535
# s.listen()                                     #监听信号
# clinet_conn, clinet_add = s.accept()           #等待连接
# clinet_conn.send('服务器收到'.encode())          #发数据给客户端
# data = clinet_conn.recv(1024)                  #从客户端收数据
# print(data.decode())                        #输出收到的信号
# clinet_conn.close()                          #关闭连接
# s.close()                                 #关闭实例



# import socket
# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.bind(('localhost', 9000))
# s.listen()
# conut = 0
# while 1:
#     conn, addr = s.accept()
#     print(f'[{conut}]got a new client ({addr})')
#     conut += 1
#     while 1:
#         data = conn.recv(1024)
#         if not data:
#             print(f'{addr} 断开了')
#             break
#         print(f'from client[{addr}]:', data.decode())
#         conn.send(data.decode().upper().encode())
# s.close()




# import socket
# import os
# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.bind(('localhost', 9000))
# s.listen()
# conut = 0
# while 1:
#     conn, addr = s.accept()
#     conut += 1
#     print(f'[{conut}]got a new client ({addr})')
#     while 1:
#         cmd = conn.recv(1024).decode()                    #收到客户指令
#         if not cmd:
#             print(f'{addr} 断开了')
#             break
#         print(f'from client[{addr}]:', cmd)
#         # 执行指令 拿到结果并发送给客户端
#         cmd_res = os.popen(cmd).read()
#         if len(cmd_res) == 0:
#             print('cmd has no output')
#         # 先告诉客户端数据大小，再发实际数据
#         conn.send(str(len(cmd_res.encode())).encode())  #cmd_res为元组 先解码在计算大小得出的结果再转成字符串再解码发送给客户端
# #有可能出现粘包现象有3种解决办法 缓冲区清空有两个方法1.缓冲区超时了2.缓冲区满了<10k  两个解决条件  1.让缓冲区超时2.通过一个recv让两条消息隔开
#         #impot time
#         #time.sleep(5)
#         #将时间加长 是系统缓冲区消失
#         #conn.recv(10)
#         #强行将两条命令隔开，通过收一条客户端相应消息的形式, 由于recv使阻塞的
#         conn.send(cmd_res.encode('utf-8'))
# s.close()




# import socket
# import os
# s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# s.bind(('localhost', 9000))
# s.listen()
# conut = 0
# while 1:
#     conn, addr = s.accept()
#     conut += 1
#     print(f'[{conut}]got a new client ({addr})')
#     while 1:
#         cmd = conn.recv(1024).decode()                    #收到客户指令
#         if not cmd:
#             print(f'{addr} 断开了')
#             break
#         print(f'from client[{addr}]:', cmd)
#         # 执行指令 拿到结果并发送给客户端
#         cmd_res = os.popen(cmd).read()
#         if len(cmd_res) == 0:
#             print('cmd has no output')
#         # 先告诉客户端数据大小，再发实际数据
#         ras_size = str(len(cmd_res.encode()))    #cmd_res为元组 先解码在计算大小得出的结果再转成字符串再解码发送给客户端
# #有可能出现粘包现象有3种解决办法 缓冲区清空有两个方法1.缓冲区超时了2.缓冲区满了<10k  两个解决条件  1.让缓冲区超时2.通过一个recv让两条消息隔开
#         msg_head = f'|{ras_size}'.zfill(16)      #生成固定长度的消息头
#         conn.send(ras_size.encode())   #发送命令长度消息头
# # 约定一个固定长度的消息头，消息头里包含命令结果的长度
#         # 服务器端收到指令，执行，拿到结果
#         # 生成一个消息头，固定长度，消息头里，写上命令结果的长度
#         conn.send(cmd_res.encode('utf-8'))
# s.close()























